"""
配置模块，用于加载环境变量和设置全局配置
"""

import os
import sys
import logging
from pydantic_settings import BaseSettings
from pydantic import Field, validator
from dotenv import load_dotenv

# 加载.env文件，以便在开发环境中直接运行脚本
load_dotenv()

# 设置基本日志，供配置类使用，后续会被loguru替换
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s | %(levelname)s | %(message)s",
    datefmt="%Y-%m-%d %H:%M:%S",
    stream=sys.stdout,
)
logger = logging.getLogger(__name__)


class Settings(BaseSettings):
    """
    应用配置类.
    pydantic-settings 会自动从环境变量或.env文件中读取配置。
    """
    # 应用信息
    APP_NAME: str = "E-com Pilot AI"
    APP_VERSION: str = "0.1.0"
    APP_DESCRIPTION: str = "基于LangGraph和FastAPI的电商运营智能助手"
    
    # API与服务器配置
    API_PREFIX: str = "/api"
    DEBUG: bool = False
    HOST: str = "0.0.0.0"
    PORT: int = 8000
    
    # LLM配置
    OPENAI_API_KEY: str = Field(default="missing_api_key")  # 提供默认值以防止启动错误
    OPENAI_MODEL: str = "gpt-4o"
    OPENAI_BASE_URL: str = "https://api.openai.com/v1"
    
    # 数据库配置
    DATABASE_URL: str = "sqlite:///./ecom_pilot.db"
    
    # 跨域配置
    CORS_ORIGINS: list[str] = ["*"]
    
    # 日志配置
    LOG_LEVEL: str = "INFO"
    
    @validator("OPENAI_API_KEY")
    def validate_openai_api_key(cls, v):
        """验证OpenAI API密钥"""
        if v == "missing_api_key" or v == "your_openai_api_key" or v == "your_openai_api_key_here" or not v:
            logger.warning("⚠️ 未设置有效的OpenAI API密钥，请在.env文件中设置OPENAI_API_KEY环境变量")
            # 返回无效密钥但不抛出错误，允许应用启动，但在使用OpenAI API时会失败
            return "sk_invalid_key_app_will_fail_when_calling_openai"
        return v
    
    class Config:
        env_file = ".env"
        env_file_encoding = 'utf-8'
        # 环境变量通常不区分大小写
        case_sensitive = False


try:
    # 创建全局配置实例
    settings = Settings()
    
    # 检查.env文件是否存在
    if not os.path.exists(".env"):
        logger.warning("⚠️ .env文件不存在，将使用默认值或环境变量。请从env.example创建.env文件。")
    
except Exception as e:
    logger.error(f"加载配置时出错: {str(e)}")
    # 使用基本默认值创建设置，以便应用能够启动并显示错误消息
    settings = Settings() 